함수형프로그래밍 개념잡기
2020-02-12
새로 투입된 프로젝트가 함수형프로그래밍과 객체지향이 혼용된 형태를 띄고 있다...
객체지향은 접해본적 있지만 함수형프로그래밍은 이름만 들어보고 따로 공부를 해본 적은 없다.
하지만 프로젝트를 이해하기 위해서는 함수형프로그래밍에대한 이해가 필요함을 느꼈고 이 게시물을 통해 깊진 않더라도 개념을 잡아보고자 한다.
함수형 프로그래밍?
먼저 얄팍한 코딩사전님의 함수형 프로그래밍이 뭔가요? 영상을보며 개념을 잡자.
-
영상 요약(요약에는 영상의 많은 설명을 삭제하고 목차만 명시한 것이라 요약만 보는 것은 절대로 금한다.)
- 객체지향과 아주 대립하는 개념은 아니다!
- 함수형 프로그래밍은 아주 이질적이라 함수형 프로그래밍적으로 사고하는 연습이 필요하다.
- 함수형 프로그래밍을 공장에 비유하여 설명하는데 함수형 프로그래밍 공장은 몇 가지 특징이 있다.
- 인풋과 아웃풋이 있음
-
외부환경으로부터 철저히 독립적이다.(순수 함수)
- 함수형 프로그래밍이 주목받게된 이유 중 하나. 부작용으로부터 비교적 자유롭다.
- 함수형 프로그래밍의 특징을 몇 가지 알아보자.
-
함수형 프로그래밍은 선언형이다.
- '이거'는 '이거'다.
- 함수도 '값'이다.
- 고계함수
-
커링
- 일부 인자를 넣어서 나머지 인자를 받는 다른 함수를 만드는 기법
- 함수 컴비네이터
- 더 고급스러운 개념을 알고싶으면 스코프, call-by-name, 모나드 등 필요한 개념을 검색해보자.
이제 개념이 잡혔으니 조금 더 상세하게 알고싶은 개념들을 살펴보자. 현재 프로젝트에서는 파이프개념을 많이 사용하고있기 때문에 파이프를 한번 살펴보자.
Pipe
- Pipe: 파이프는 단방향 통신을 위한 용도로 사용된다. 하나의 파이프는 그 이전 파이프에서 전달된 결과를 파라미터로 삼아 또 다른 결과를 내놓는다.
-
순수함수
- 같은 입력 값에선 같은 반환 값을 보장한다.
- 함수 외부 스코프의 그 어떠한 변수의 값도 바꾸지 않는다.
- 예제 코드는 위 링크에 접속해서 블로그의 코드를 보도록하자. 그 코드를 보고 든 생각은 함수 하나의 기능이 많아 분리하되 하나의 순수 함수처럼 동작하게 하고 싶을 때 파이프를 이용해서 연결하면 되겠다는 생각이 들었다. 처음에는 파이프가 어떠한 특별한 기능을 해주는 줄 알았는데 그렇다기 보다는 파이프 이름 그대로 단순히 연결해주는 기능을 하는 것 같다. 물론 추가적인 기능들이 있는지는 추가적인 검색이 필요할 듯 하다.